#include <stdio.h>
#include <string.h>

int main(void){
     //Declarando variaveis para atribuicao dos numeros, verificacao de numero da sorte e contagem de numeros
    int a, b, qtd = 0, numeroDaSorte = 0;
     //Le os numeros de inicio e fim
    scanf("%d%d", &a, &b);
     //Se os numeros forem validos comeca a verificar um por um ateh o numero final
    if ((a >= 0) && (b >= 0) && (b > a)){
          do{
                 //Chama a funcao de verificacao; Retorna 1 se o numero atual for um numero da sorte, senao retorna 0
                numeroDaSorte = verificaNumero(a);
                 //Soma o valor retorna da verificacao de numero da sorte; Vai somar 1 caso o numero seja da sorte, senao vai somar 0
                qtd = qtd + numeroDaSorte;
//                if (numeroDaSorte == 1){  //REMOVER
//                printf("a: %d\n", a); //REMOVER
//                printf("numeroDaSorte: %d\n", numeroDaSorte); //REMOVER
//                  } //REMOVER
                 //Avanca para o proximo numero
                a++;
//                printf("qtd: %d\n", qtd); //REMOVER
//                system("PAUSE"); //REMOVER
          } while (a <= b);
           //Apresenta a quantidade de numeros da sorte
          printf("%d\n", qtd);
    }
     //Caso os numeros informados sejam invalidos retorna Entrada Invalida
    else printf("Entrada invalida\n");
//    system("PAUSE"); //REMOVER
//    main(); //REMOVER
}

 //Funcao que verifica se o numero eh um numero da sorte
int verificaNumero(int vn){
    int ehPrimo = 0, naoTemSete = 0;
//    printf("vn: %d\n", vn); //REMOVER
     //Chama a funcao que verifica se o numero eh primo; se for primo retorna 1, senao retorna 0
    ehPrimo = verificaPrimo(vn);
//    printf("ehPrimo: %d\n", ehPrimo); //REMOVER
     //Chama a funcao que verifica se o numero tem sete; se NAO tiver sete retorna 1, senao retorna 0
    naoTemSete = verificaSeTemSete(vn);
//    printf("temSete: %d\n", temSete); //REMOVER
     //Retorna a multiplicacao entre as 2 verificacoes, ou seja, se o "naoTemSete=1" e "ehPrimo=1" o numero eh da sorte
    return (ehPrimo * naoTemSete);
}

 //Funcao que verifica se o numero eh primo
int verificaPrimo(int vp){
    int divisor = 2, qtdDivisores = 0;
     //Se o numero for menor ou igual a 1 ele nao eh primo
    if (vp <= 1) return 0;
     //Se o numero for MAIOR que 2 comeca uma repeticao para descobrir se ele tem divisores
    if (vp > 2){
        //Comeca dividindo por 2
       do{
           //Se o resto da divisao for zero o numero possui um divisor diferente de 1 e ele mesmo; Retorna 0
          if (vp%divisor == 0) return 0;
           //Avanca o divisor em 1
          divisor++;
       } while (divisor <= vp/2); //Repete ateh o divisor ser maior que a metade do numero
    }
     //Se a verificacao se divisores nao retornar 0 e o numero for igual a 2; retorna 1
    return 1;
}

 //Funcao que verifica se o numero tem o digito 7
int verificaSeTemSete(int vsts){
    int resto = 0;
    
    //Divido o numero por 10 e verifica se o resto eh igual a 7, se for retorna 0, 
    //senao elimina o ultimo digito dividindo por 10 sem transformar o numero em float
    do{
       resto = vsts%10;
//       printf("a7: %d\n", vsts); //REMOVER
//       printf("resto: %d\n", resto); //REMOVER
       if (resto == 7) return 0;
       vsts = vsts/10;
    } while (vsts >= 7); //Repete ateh que o ultimo digito seja menor ou igual a 7
     //Se o numero nao tem digitos 7 retorna 1
    return 1;
}
